Майнор "Интеллектуальный анализ данных"

Курс "Введение в анализ данных"

Лабораторная работа №2. Кластерный анализ.

Часть 1

В данном задании вам необходимо самостоятельно реализовать один из алгоритмов кластеризации.
По аналогии с классами в scikit-learn, нужно реализовать класс, наследуемый от Base Estimator.
Подробнее про реализацию своих моделей в scikit-learn: here.
В классе помимо __init__() нужно реализовать два метода:

Для удобства можно создавать дополнительные методы класса, которые будут вызываться в fit() или predict().
Функции для вычисления расстояний между объектами самим реализовывать не нужно, используйте реализации из scipy.

Задание

Алгоритм агломеративной кластеризации.

Параметры:

Атрибуты:

Дополнительно нужно реализовать метод get_labels() для вычисления labels_, он должен быть аналогичен fcluster().
В случае, если n_clusters не None, то после вычисления матрицы z_ в методе fit() должен быть вызван get_labels() с соответствующими параметрами, и вычислены labels_. В других случаях метод fit() только вычисляет матрицу z_, для вычисления labels_ нужно явно вызывать get_labels().

Метод predict(): Кластер для нового объекта определяется по методу, заданному в linkage.
Note: Метод predict() не выполняется в случае, когда metric - это матрица расстояний.

Тестирование

Вашу реализацию необходимо сравнить с питоновской реализацией алгоритма из sklearn или scipy. Результаты кластеризации должны совпадать.
Также необходимо сравнить скорость работы вашей реализации и питоновской (это нормально, если ваша реализация будет медленнее).
Сравнение необходимо выполнить на наборе данных iris.

Бонусное

Дополнительно вы можете поработать над эффективностью алгоритма по скорости и памяти, добавить поддержку многопоточности, или расширить базовый функционал.

Часть 2

В данном задании вам предлагается проанализировать набор данных по различным городам США. Каждый город характеризуется следующими признаками:

Notes:


Задания:

  1. Выполните необходимую предобработку данных. Перед кластеризацией исключите из данных признаки Place, Long и Lat.
  1. Выполните кластеризацию иерархическим методом.
    Рассмотрите различные расстояния между объектами. Определите, какие следует использовать при кластеризации.
    Выполните кластеризацию с различными расстояниями между кластерами. Сравните результаты, сделайте выводы.
  1. Выполните кластеризацию методом Dbscan. Используйте расстояния между объектами, определенные в предыдущем пункте.
    Реализуйте эвристику (см. лекции) для выбора параметров алгоритма. Подберите подходящие параметры алгоритма.
  1. Выполните кластеризацию методом kmeans. Определите наилучшее (на ваш взгляд) число кластеров.
  1. (Бонусное) Выполните кластеризацию другими методами. Например, HDBSCAN или алгоритмы, реализованные в scikit-learn.
  1. В результате выполнения предыдущих пунктов вы должны получить 4 или больше разбиений объектов (по одному на каждый метод). Сравните их между собой, сделайте выводы о сходствах и различиях.
    Оцените результаты каждой кластеризации, используя метрики, рассмотренные на занятиях (Silhouette и прочие).
  1. Выберите одно разбиение, наиболее подходящее на ваш взгляд. Предложите интерпретацию полученным кластерам или покажите, что этого сделать нельзя.
  1. Оцените, как полученные кластеры распределены географически.
    Оцените, как полученные кластеры распределены по штатам. Можно ли выделить какую-то зависимость (территориальную или для штатов)?
    (Бонусное) Провизуализируйте распределение на карте США.

2. Иерархическая кластеризация

Проверим разные расстояния между кластерами

Вывод

Судя по денрограммам, наилучшим решением будет использовать расстояние ward, а оптимальным количеством кластеров - 3. Посмотрим подтвердятся ли те же данные в собственно алгоритме кластеризации.

Вывод по иерархической (агломеративной) класстеризации:

Графики агломеративной кластеризации с разными расстояниями незначительно отличаются друг от друга, поэтому выбрать наиболее оптимальное расстояние мы можем на основе дендрограмм - ward. Оптимальное количество кластеров остается равным 3.

Так как использование расстояния ward оказалось наиболее оптимальным, мы не можем попробовать другие метрики, только euclidean.

3. Dbscan

Вывод по eps

Судя по графикам, лучшим значением eps будет 0.05

Вывод по DBSCAN

В целом DBSCAN выделяет в этих данных один кластер и шум. Наиболее оптимальными параметрами оказываются eps=0.05, а min_samples=4 или 5

4. KMeans

Вывод по KMeans

Кажется, что лучшим числом кластеров будет 3 - более плотные данные, более разреженные и "выбросы"

6. Оценка алгоритмов, используя метрики

7. Общий вывод по всем алгоритмам

Рассмотрев и проанализировав все алгоритмы, метрики оценивания, получившиеся кластеризации и их графики, я пришла к выводу, что алгоритм KMeans справился с этой задачей лучше остальных алгоритмов. Соответственно, 3 кластера кажутся мне оптимальными для данного набора.

8. Географическое распределение

Выводы по графикам

Судя по координатам, города в 2х кластерах из 3х распределены по карте более-менее равномерно (присутсвуют данные в каждой части страны), поэтому стоит посмотреть на самые частые штаты по кластерам. В первом это Техас (центральная часть страны), во втором - Калифорния (западное побережье) (а на втором месте Коннектикут - восточное побережье). У третьего класса каждый из представленных штатов встречается один раз, и большинство из них расположены на восточном побережье страны. Также и для 1 и 2 кластера города расположены более плотно на восточном побережье.

Карта также подтверждает, что большая часть данных сосредоточена на восточном побережье страны и в целом в восточной ее половине.